package com.xushu.app.singletonDemo;

// 什么是单例设计模式---> 保证一个类只有一个实例，并提供一个全局访问点（节省内存开销）
// 2种方式 ：
// 	饿汉（急） 在类加载的时候就会创建 没有多线程竞争 线程安全
// 	懒汉（懒） 有些对象大 等用到的时候再实例化  线程不安全--->双重检查锁DCL
public class Bean {

	private static Bean bean;//=new Bean();

	// synchronized应该怎么加 锁什么？
	// 锁 只锁临界资源= 多线程的竞争资源
	public static Bean getBean() {
		// 业务代码...
		// 业务代码...
		// 业务代码...

		if(bean!=null) {
			return bean;
		}
		synchronized (bean) {
			if(bean!=null) {
				return bean;
			}

			bean = new Bean();
		}

		return bean;

	}

















	public static void main(String[] args) {
		for (int i=0;i<1000;i++){
			new Thread(()-> {
			/*	try {
					System.out.println(Singleton.getInstance().hashCode());
				} catch (InterruptedException e) {
					throw new RuntimeException(e);
				}*/
			}).start();
		}
	}

}
